package mysql8学习.高级.第07章_InnoDB数据存储结构存储;


/**
 * 为什么要有碎片区?
 * 默认情况下，一个使用InnoDB存储引擎的表只有一个聚簇索引，一个索引会生成2个段，而段是以区为单位申请存储空间的，
 * 一个区默认占用1M (64 * 16Kb = 1024Kb)存储空间，
 * 所以默认情况下一个只存了几条记录的小表也需要2M的存储空间么?
 * 以后每次添加一个索引都要多申请2M的存储空间么?
 * 这对于存储记录比较少的表简直是天大的浪费。
 * 这个问题的症结在于到现在为止我们介绍的区都是非常纯粹的，
 * 也就是一个区被整个分配给某一个段，或者说区中的所有页面都是为了存储同一个段的数据而存在的，
 * 即使段的数据填不满区中所有的页面，那余下的页面也不能挪作他用。
 * 为了考虑以完整的区为单位分配给某个段对于数据量较小的表太浪费存储空间的这种情况，
 * InnoDB提出了一个碎片(fragment)区的概念。
 * 在一个碎片区中，并不是所有的页都是为了存储同一个段的数据而存在的，
 * 而是碎片区中的页可以用于不同的目的，比如有些页用于段A,有些页用于段B,有些页甚至哪个段都不属于。
 * 碎片区直属于表空间，并不属于任何一个段。
 * @see I0_表空间
 *
 * 所以此后为某个段分配存储空间的策略是这样的:
 * ●在刚开始向表中插入数据的时候，段是从某个碎片区以单个页面为单位来分配存储空间的。
 * ●当某个段已经占用了"""32"""个碎片区页面之后，就会申请以完整的区为单位来分配存储空间。
 *  所以现在段不能仅定义为是某些区的集合，更精确的应该是某些零散的页面以及一些完整的区的集合。
 *
 */
public class G_碎片区 {
}

